<?php

namespace App\Http\Controllers\Admin;

use App\Models\Node;
use App\Models\Role;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use Mockery\Exception;

class RoleController extends BaseController
{
    /**
     * 角色列表获取
     */
    public function index(Request $request)
    {
        $name = $request->get('name', '');
        // 从数据表获取数据
        $list = Role::when($name, function ($query) use ($name) {
            $query->where('name', 'like', "%{$name}%");
        })->paginate($this->pagesize);
        // 讲数据传至页面
        return view('admin.role.index', compact('list', 'name'));
    }

    /**
     * 添加页面显示
     */
    public function create()
    {
        return view('admin.role.create');
    }

    /**
     * 保存添加的数据
     */
    public function store(Request $request)
    {
        try {
            $data = $this->validate($request, [
                'name' => 'required|unique:roles,name'
            ]);
        } catch (\Exception $e) {
            return ['status' => 1000, 'msg' => '验证不通过'];
        }
        Role::create($data);
        return ['status' => 200, 'msg' => '添加角色成功'];
    }

    /**
     * 显示角色详情
     */
    public function show($id)
    {
        //
    }

    /**
     * 显示修改页面
     */
    public function edit($id)
    {
        $data = Role::find($id);
        return view('admin.role.edit', compact('data'));
    }

    /**
     * 保存修改的数据
     */
    public function update(Request $request, int $id)
    {
        try {
            // 数据验证
            $this->validate($request, [
                'name' => [
                    'required',
                    Rule::unique('roles')->ignore($id)
                ],
            ]);
        } catch (\Exception $e) {
            return ['msg' => '验证不通过', 'status' => 404];
        }

        // 数据更新
        Role::where('id', $id)->update($request->only('name'));
        return ['msg' => '修改角色成功', 'status' => 200];
    }

    /**
     * 删除数据
     */
    public function destroy($id)
    {
        Role::where('id', $id)->delete();
        return ['msg' => '删除成功', 'status' => 200];
    }

    // 给角色添加权限 页面显示
    public function node(Role $role)
    {
        // dump($role->nodes->toArray());
        // dump($role->nodes()->pluck('id')->toArray());
        $id = $role->id;
        // 获取所有权限
        $nodeAll = (new Node())->getAllList();
        // 获取当前角色权限
        $nodes = $role->nodes()->pluck('id')->toArray();
        // 返回数据桌子模型
        return view('admin.role.node', compact('nodeAll', 'nodes', 'role'));
    }

    // 角色天剑权限 保存
    public function nodesave(Request $request, Role $role)
    {
        // 关联模型
        $role->nodes()->sync($request->get('node'));
        return redirect(route('admin.role.index'));
    }
}
